In part II, we determined the makeup of parliament under the three different systems. In this part, we’ll reframe these results so we can perform a side-to-side analysis and draw some reasonable inferences.
Due to the presence of list seats in an MMP system, looking at electorates alone elides the comparative advantage of the MMP system. For this reason, I’ve broken this section into two subsections: the first determines the total composition of parliament under each of FPTP, MMP, and STV, whilst the second compares the winners of electorates under FFP and STV.
Composition by Party
compare.parliament = votes %>%
group_by(PartyAb) %>%
filter(CountNumber == 0) %>%
summarise(partyVoteN = sum(prefCount)) %>%
mutate(partyVotePC = (partyVoteN / sum(partyVoteN)) %>%
multiply_by(100) %>%
round(digits = 2)) %>%
# Join to MMP
full_join(mmp %>%
select(PartyAb,
mmpElecSeatsN = seatsElecN,
mmpListSeatsN = seatsListN,
mmpTotSeatsN = seatsTotalN,
mmpTotSeatsPC = seatsTotalPC)) %>%
# Join to STV
full_join(stv %>%
group_by(PartyAb) %>%
summarise(stvSeatsN = n())) %>%
# Join to FPTP
full_join(fptp %>%
group_by(PartyAb) %>%
summarise(fptpSeatsN = n())) %>%
# Tidy up the missing
mutate(across(c(stvSeatsN, fptpSeatsN), ~ ifelse(is.na(.), 0, .)),
stvSeatsPC = (stvSeatsN / sum(stvSeatsN)) %>%
multiply_by(100) %>%
round(digits = 2),
fptpSeatsPC = (fptpSeatsN / sum(fptpSeatsN)) %>%
multiply_by(100) %>%
round(digits = 2)) %>%
# Difference from party vote
mutate(across(ends_with("SeatsPC"), ~ . - partyVotePC, .names = "{.col}_diff"))| Comparison of Parliament Under Three Voting Systems | ||||||||||
| Australian Federal Election 2022 | ||||||||||
| Party | Party Vote (%) | Mixed Member Proportional | Single Transferrable Vote | First Past the Post | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Seats (n) | Seats (%) | Deviance (%) | Seats (n) | Seats (%) | Deviance (%) | Seats (n) | Seats (%) | Deviance (%) | ||
| ALP | 32.58 | 81 | 36.65 | 4.07 | 77 | 50.99 | 18.41 | 71 | 47.02 | 14.44 |
| LP | 23.89 | 59 | 26.70 | 2.81 | 27 | 17.88 | -6.01 | 40 | 26.49 | 2.60 |
| GRN | 12.25 | 31 | 14.03 | 1.78 | 4 | 2.65 | -9.60 | 2 | 1.32 | -10.93 |
| LNP | 8.00 | 23 | 10.41 | 2.41 | 21 | 13.91 | 5.91 | 23 | 15.23 | 7.23 |
| IND | 5.30 | 3 | 1.36 | -3.94 | 10 | 6.62 | 1.32 | 3 | 1.99 | -3.31 |
| ON | 4.96 | 12 | 5.43 | 0.47 | 0 | 0.00 | -4.96 | 0 | 0.00 | -4.96 |
| UAPP | 4.12 | 0 | 0.00 | -4.12 | 0 | 0.00 | -4.12 | 0 | 0.00 | -4.12 |
| NP | 3.60 | 10 | 4.52 | 0.92 | 10 | 6.62 | 3.02 | 10 | 6.62 | 3.02 |
| LDP | 1.73 | 0 | 0.00 | -1.73 | 0 | 0.00 | -1.73 | 0 | 0.00 | -1.73 |
| AJP | 0.60 | 0 | 0.00 | -0.60 | 0 | 0.00 | -0.60 | 0 | 0.00 | -0.60 |
| CYA | 0.39 | 0 | 0.00 | -0.39 | 0 | 0.00 | -0.39 | 0 | 0.00 | -0.39 |
| KAP | 0.38 | 1 | 0.45 | 0.07 | 1 | 0.66 | 0.28 | 1 | 0.66 | 0.28 |
| XEN | 0.25 | 1 | 0.45 | 0.20 | 1 | 0.66 | 0.41 | 1 | 0.66 | 0.41 |
| WAP | 0.23 | 0 | 0.00 | -0.23 | 0 | 0.00 | -0.23 | 0 | 0.00 | -0.23 |
| GAP | 0.21 | 0 | 0.00 | -0.21 | 0 | 0.00 | -0.21 | 0 | 0.00 | -0.21 |
| Deviance is the percentage difference between the proportion of seats held compared to the 1st preference vote. | ||||||||||
| NB: Parties receiving less than 30,000 votes are not displayed. | ||||||||||
Composition by Electorates
compare.seat = full_join(
stv %>%
mutate(name = paste(GivenNm, Surname)) %>%
select(StateAb, DivisionNm,
stvID = CandidateID, stvName = name, stvParty = PartyAb, stvCount = prefCount, stvMargin = margin),
fptp %>%
mutate(name = paste(GivenNm, Surname)) %>%
select(StateAb, DivisionNm,
fptpID = CandidateID, fptpName = name, fptpParty = PartyAb, fptpCount = prefCount, fptpMargin = margin),
by = c("StateAb", "DivisionNm")) %>%
mutate(identical = ifelse(stvID == fptpID, TRUE, FALSE)) %>%
select(-c(stvID, fptpID))| Comparison of Electorates with Differing Outcomes Under STV and FPTP | |||||||||
| Australian Federal Election 2022 | |||||||||
| State | Single Transferable Vote | First Past the Post | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Elected Member | Party | Votes (n) | Margin (n) | Elected Member | Party | Votes (n) | Margin (n) | ||
| Bennelong | NSW | Jerome LAXALE | ALP | 50,801.00 | 1,954.00 | Simon KENNEDY | LP | 41,206.00 | 3,610.00 |
| Boothby | SA | Louise MILLER-FROST | ALP | 60,579.00 | 7,451.00 | Rachel SWIFT | LP | 43,196.00 | 6,450.00 |
| Brisbane | QLD | Stephen BATES | GRN | 58,460.00 | 8,122.00 | Trevor EVANS | LNP | 41,032.00 | 11,380.00 |
| Curtin | WA | Kate CHANEY | IND | 53,847.00 | 2,657.00 | Celia HAMMOND | LP | 43,408.00 | 12,466.00 |
| Fowler | NSW | Dai LE | IND | 44,348.00 | 2,793.00 | Kristina KENEALLY | ALP | 30,973.00 | 5,627.00 |
| Gilmore | NSW | Fiona PHILLIPS | ALP | 56,039.00 | 373.00 | Andrew CONSTANCE | LP | 46,941.00 | 6,766.00 |
| Goldstein | VIC | Zoe DANIEL | IND | 51,861.00 | 5,635.00 | Tim WILSON | LP | 39,607.00 | 5,792.00 |
| Higgins | VIC | Michelle ANANDA-RAJAH | ALP | 49,726.00 | 3,941.00 | Katie ALLEN | LP | 38,859.00 | 11,672.00 |
| Kooyong | VIC | Monique RYAN | IND | 54,276.00 | 6,035.00 | Josh FRYDENBERG | LP | 43,736.00 | 2,433.00 |
| Lyons | TAS | Brian MITCHELL | ALP | 37,341.00 | 1,344.00 | Susie BOWER | LP | 27,296.00 | 6,001.00 |
| Mackellar | NSW | Sophie SCAMPS | IND | 51,973.00 | 4,955.00 | Jason FALINSKI | LP | 40,993.00 | 3,269.00 |
| North Sydney | NSW | Kylea Jane TINK | IND | 51,392.00 | 5,666.00 | Trent ZIMMERMAN | LP | 36,956.00 | 12,479.00 |
| Robertson | NSW | Gordon REID | ALP | 50,277.00 | 4,344.00 | Lucy WICKS | LP | 38,448.00 | 2,217.00 |
| Ryan | QLD | Elizabeth WATSON-BROWN | GRN | 52,286.00 | 5,256.00 | Julian SIMMONDS | LNP | 38,239.00 | 8,236.00 |
| Tangney | WA | Sam LIM | ALP | 56,331.00 | 5,114.00 | Ben MORTON | LP | 43,008.00 | 2,068.00 |
| Wentworth | NSW | Allegra SPENDER | IND | 48,186.00 | 7,449.00 | Dave SHARMA | LP | 35,995.00 | 4,185.00 |